package dominio;

import tiempo.Cronometro;
import tiempo.ICronometrado;

public class EstadoPresa extends FantasmaEstado implements ICronometrado {
	private static final Integer AGRESIVIDAD_INICIAL = 1;
	
	private Boolean fueComido;
	private Boolean terminoTiempoPresa;
	private Cronometro cronometro;
	
	
	public EstadoPresa() {
		super();
		fueComido = false;
		terminoTiempoPresa = false;
		cronometro = new Cronometro(this, Juego.getInstance().getLaberinto().getDuracionPastilla());
		cronometro.start();
	}

	@Override
	public void colisionar(IMovible fantasma, Pacman pacman) {
		if (fantasma.getNodoActual().equals(pacman.getNodoActual())) { 
			fueComido = true;
		}
	}

	@Override
	public void molestar() {
		// Esta bien que no haga nada aca
		
	}

	@Override
	public Integer getAgresividadInicial() {
		return AGRESIVIDAD_INICIAL;
	}

	@Override
	public void timeOut() {
		if (!fueComido) {
			terminoTiempoPresa = true;
		}		
	}

	@Override
	public synchronized void siguienteEstado(Fantasma fantasma) {
		if (fantasma.getComioPastilla()) {
			this.cronometro.agregarTiempo(Juego.getInstance().getLaberinto().getDuracionPastilla());
			fantasma.setComioPastilla(false);
		} else if (fueComido) {
			fantasma.setEstadoActual(new EstadoMuerto());
		} else if (terminoTiempoPresa) {
			fantasma.setEstadoActual(new EstadoCazador()); 
		}
	}

	@Override
	
	public void moverFantasma(Fantasma fantasma, IMovible pacman) {
		fantasma.getVivacidad().escapar(fantasma, pacman);
	}

	

	@Override
	public String toString() {
		return "Presa";
	}

}
